如何在 MySQL 中从多个表中进行选择

您所在的位置:网站首页 select 多个表 如何在 MySQL 中从多个表中进行选择

如何在 MySQL 中从多个表中进行选择

2023-03-17 01:25| 来源: 网络整理| 查看: 265

当前位置:主页 > 学无止境 > 数据库 > WEB前端 编程语言 网络 算法 操作系统 数据库 如何在 MySQL 中从多个表中进行选择 作者:迹忆客 最近更新:2023/03/13 浏览次数:

本篇文章介绍了如何在一个脚本中使用 MySQL 从多个表中查询 SELECT。

让我们演示一种情况:

SELECT name, price, details, type, FROM food, food_order WHERE breakfast.id = 'breakfast_id'

现在,让我们想象一下每个 FROM 条目的示例表。

food food_menu

根据上面的表,我们可以看到鸡蛋有 3 张照片,冰淇淋也有 3 张,而拉面有 2 张,我们要输出的是一个 food 和 food_menu 的聚合表,将所有的食物显示在一起,并结合菜单中相应的照片。

如果我们对此进行查询。

SELECT name, price, options, photo FROM food, food_menu WHERE food_id = '1'

结果会是这样的:

数据是重复的,因为 food_menu 中有多行与 food 相关的数据。在本例中,food_menu 中有 3 张照片是直接与 Eggs 绑定的。

简单的查询不可能将 food_menu 中的所有条目连接到一条记录中,因为它们都被认为是与表 food 相关的独立实体。

如果你想同时在一行中查询 food 和 food_menu,那么这里有几个选项。

使用 GROUP BY food 从多个表中 SELECT 的方法

这种方法使用 GROUP BY 将两张表汇总到一个结果中。但缺点是,你只能得到 food_menu 的第一个实例,因为我们强迫结果是唯一的。

下面是对 GROUP BY food 表的查询。

SELECT name, price, options, photo FROM food, food_menu WHERE food_id = '1' GROUP BY food_id

它将显示以下结果。

现在我们已经满足了条件,尽管只返回了一张照片,这是查询发现的第一个 food_menu 实例。

在 MySQL 中使用 JOIN 从多个表中 SELECT

这种方法利用了 SQL 的 JOIN 或 RIGHT JOIN 命令。

我们在脚本中没有 2 个 FROM 条件,而是根据它的 food_id 外键来连接 food_menu。我们将 f 作为 food 的别名,将 fm 作为 food_menu 的别名。

SELECT f.name, f.price, f.options, fm.food_menu FROM food AS f JOIN food_menu AS fm ON fm.food_id = f.food_id WHERE food_id = '1' GROUP BY f.food_id

虽然这个方法与前一个方法不同,但它产生的结果是一样的。它返回的是 food_menu 的第一个实例,因为 GROUP BY 迫使查询根据其条件返回唯一的行。

在 MySQL 中使用 GROUP_CONCAT() 并处理结果

上一个解决方案的变通方法是使用 GROUP_CONCAT() 将 food_menu 的所有结果放在一个单一的字符串中,因此可以将他们的所有记录放在一个行中。

什么是 GROUP_CONCAT()

GROUP_CONCAT 是一个将多行数据合并到一个字段的函数。它是一个 GROUP BY 的特殊函数,如果组中至少包含 1 个非空值,则返回一个修改后的字符串。否则就返回 NULL。

我们将上面的查询修改为 GROUP_CONCAT() 照片列,将结果连成一个字符串。

SELECT name, price, options, GROUP_CONCAT(photo, ', ') FROM food, food_menu WHERE food_id = '1' GROUP BY food_id

通过这样做,我们将 food_menu 的照片列连接起来,这样每条 food 的唯一条目将只产生一条记录。结果将如下所示。

正如你所看到的,它连接了 3 个与 Eggs 相关的 food 表中的 photo 列。

如果我们把 GROUP BY 和 WHERE 条件去掉的话

SELECT name, price, options, GROUP_CONCAT(photo, ', ') FROM food, food_menu

结果是这样的

在使用 GROUP_CONCAT() 时一定要小心,如果你的字符串中包含一个逗号,而你的 CONCAT 定界符也是一个逗号,那么在解析你的列时就会破坏你的数据。

所以在使用这个函数之前,请确保你的定界符对于你要操作的列来说是一个无效的字符。

上一篇:在 PHP 中使用 MySQL 表插入表单数据

下一篇:没有了

相关文章 选择 MySQL 中的最新记录

发布时间:2023/03/13 浏览次数:134 分类:数据库

本教程演示如何在 MySQL 中选择最近的记录。

如何在 MySQL 中删除所有表

发布时间:2023/03/13 浏览次数:172 分类:数据库

它演示了如何在 SQL 中删除所有的表

在 Django 中处理原始查询

发布时间:2023/02/27 浏览次数:94 分类:学无止境

通过这个解释,我们将了解 raw() 方法的作用以及我们如何操作原始查询。我们还将学习如何在 Django 中的应用程序中注入 SQL。

SQL查询中如何连接三张表

发布时间:2023/02/03 浏览次数:212 分类:数据库

在单个 SQL 中连接三个表 如果大家不熟悉 SQL Join 的概念,查询可能会非常棘手。 SQL 连接一直很棘手,不仅对于新程序员而且对于许多其他从事编程和 SQL 工作超过 2 到 3 年的人来说也

SQL中row_number()、rank()和dense_rank() 函数的区别

发布时间:2023/02/01 浏览次数:189 分类:数据库

尽管这三个都是 SQL 中的排名函数,在 Microsoft SQL Server 中也称为 Window 函数,但是当在排名上有联系时,即重复记录, rank() 、 dense_rank() 和 row_number() 之间的区别就会出现。 例如,如果

SQL Server 中 char、varchar、nchar 和 nvarchar 数据类型之间的区别?

发布时间:2023/02/01 浏览次数:171 分类:数据库

SQL 中 char 和 varchar 的区别是什么,其次是 nchar 和 nvarchar ,是热门的 SQL 面试问题之一,令人惊讶的是并不是每个程序员都知道这个基本区别。 如果大家从名称出发(应该这样做),那

SQL Server 中的 VARCHAR(n) 列允许多少个字符? VARCHAR 变量在磁盘中

发布时间:2023/02/01 浏览次数:171 分类:数据库

SQL Server 中的 VARCHAR(n) 列允许多少个字符? VARCHAR 变量在磁盘中占用多少空间?SQL 的常见问题之一是 SQL 中的 VARCHAR 和 CHAR 数据类型有什么区别?

关于 SQL 中的 LIKE 运算符你需要知道的一切

发布时间:2023/01/07 浏览次数:138 分类:数据库

SQL是一种语言,它由多个命令和运算符组成。 但是,当我们必须根据某些模式或字符检索数据时,我们将需要 LIKE 运算符。 因此,在这篇关于 SQL 中的 LIKE 的文章中,我将讨论以下主题

Hibernate 本机 SQL

发布时间:2022/05/21 浏览次数:57 分类:教程更新

如果想利用数据库特定的功能,例如查询提示或 Oracle 中的 CONNECT 关键字,我们可以使用本机 SQL 来表示数据库查询。 Hibernate 允许我们为所有创建、更新、删除和加载操作指定手写 SQL,

转载请发邮件至 [email protected] 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3